package com.winglish.as3.utils 
{
	import flash.display.MovieClip;
	import flash.geom.Point;
	
	import com.winglish.as3.utils.QuizUtil;
	
	/**
	 * ...
	 * @author charmjin
	 */
	public class DragUtil 
	{
		public function DragUtil() 
		{
		}
		
		/**
		 * obj에 따라 드래그가 끝나고 이벤트에 대한 설정.
		 * name : move는 드래그 무비클립을 타겟 무비클립의 가운데 위치로 이동.
		 *        playFrame은 무비클립 gotoAndPlay
		 *        stopFrame은 무비클립 gotoAndStop
		 *        remove는 무비클립 visible = false
		 * frame : 이동할 프레임 레이블 이름.
		 * target : 적용시킬 무비클립.
		 * @param	obj
		 * @param	drag
		 * @param	target
		 */
		static public function dragEnd(obj:Object, drag:MovieClip, target:MovieClip):void {
			for each (var j:String in obj) 
			{
				switch(j) {
					case "move" :
						moveDrag(drag, target);
						break;
					case "playFrame" :
						switch(obj["target"]) {
							case "drag" : 
								playFrame(obj["frame"], drag);
								break;
							case "target" : 
								playFrame(obj["frame"], target);
								break;
							case "both" : 
								playFrame(obj["frame"], drag);
								playFrame(obj["frame"], target);
								break;
						}
						break;
					case "stopFrame" : 
						switch(obj["target"]) {
							case "drag" : 
								stopFrame(obj["frame"], drag);
								break;
							case "target" : 
								stopFrame(obj["frame"], target);
								break;
							case "both" : 
								playFrame(obj["frame"], drag);
								stopFrame(obj["frame"], target);
								break;
						}
						break;
					case "remove" :
						break;
				}
			}
		}
		
		/**
		 * 드래그 무비클립을 타켓 무비클립의 가운데 위치로 이동.
		 * @param	drag
		 * @param	target
		 */
		static public function moveDrag(drag:MovieClip, target:MovieClip):void {
			var point:Point = QuizUtil.changeGlobalToLocal(target, MovieClip(drag.parent));
			drag.x = point.x + target.width/2 - drag.width/2;
			drag.y = point.y;
		}
		
		/**
		 * 무비클립 frame 위치로 gotoAndStop()
		 * @param	frame
		 * @param	mc
		 */
		static public function stopFrame(frame:String, mc:*):void {
			try{
				mc.resetPositionNoTween();
				mc.currentMc.gotoAndStop(frame);
			}catch (e:Error) {
				mc.gotoAndStop(frame);
				//trace("resetPositionNoTween 함수가 없음");
			}
			
		}
		
		/**
		 * 무비클립 frame 위치로 gotoAndPlay()
		 * @param	frame
		 * @param	mc
		 */
		static public function playFrame(frame:String, mc:MovieClip):void {
			try{
				mc.resetPositionNoTween();
				mc.currentMc.gotoAndPlay(frame);
			}catch (e:Error) {
				mc.gotoAndPlay(frame);
				//trace("resetPositionNoTween 함수가 없음");
			}
			
		}
	}
		

}